package com.smart.community.region.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 物业公司户型表实体类
 * 
 * @author Wu.Liang
 * @version 1.0.0
 * @since 2025-01-30
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sc_property_house_type")
@Schema(description = "物业公司户型表实体")
public class PropertyHouseType implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @Schema(description = "主键ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 物业公司ID
     */
    @Schema(description = "物业公司ID")
    @TableField("property_company_id")
    private Long propertyCompanyId;

    /**
     * 户型名称（必填）
     */
    @Schema(description = "户型名称")
    @TableField("house_type_name")
    private String houseTypeName;

    /**
     * 建筑面积（必填，平方米）
     */
    @Schema(description = "建筑面积（平方米）")
    @TableField("total_area")
    private BigDecimal totalArea;

    /**
     * 套内面积（平方米）
     */
    @TableField("usable_area")
    private BigDecimal usableArea;

    /**
     * 公摊面积（平方米）
     */
    @TableField("public_area")
    private BigDecimal publicArea;

    /**
     * 得房率（%）
     */
    @TableField("efficiency_rate")
    private BigDecimal efficiencyRate;

    /**
     * 卧室总数
     */
    @TableField("bedroom_count")
    private Integer bedroomCount;

    /**
     * 主卧数量
     */
    @TableField("master_bedroom_count")
    private Integer masterBedroomCount;

    /**
     * 次卧数量
     */
    @TableField("secondary_bedroom_count")
    private Integer secondaryBedroomCount;

    /**
     * 儿童房数量
     */
    @TableField("children_room_count")
    private Integer childrenRoomCount;

    /**
     * 客厅数量
     */
    @TableField("living_room_count")
    private Integer livingRoomCount;

    /**
     * 餐厅数量
     */
    @TableField("dining_room_count")
    private Integer diningRoomCount;

    /**
     * 厨房数量
     */
    @TableField("kitchen_count")
    private Integer kitchenCount;

    /**
     * 卫生间总数
     */
    @TableField("bathroom_count")
    private Integer bathroomCount;

    /**
     * 主卫数量
     */
    @TableField("master_bathroom_count")
    private Integer masterBathroomCount;

    /**
     * 公卫数量
     */
    @TableField("public_bathroom_count")
    private Integer publicBathroomCount;

    /**
     * 客卫数量
     */
    @TableField("guest_bathroom_count")
    private Integer guestBathroomCount;

    /**
     * 书房数量
     */
    @TableField("study_room_count")
    private Integer studyRoomCount;

    /**
     * 储物间数量
     */
    @TableField("storage_room_count")
    private Integer storageRoomCount;

    /**
     * 衣帽间数量
     */
    @TableField("cloakroom_count")
    private Integer cloakroomCount;

    /**
     * 入户花园数量
     */
    @TableField("entrance_garden_count")
    private Integer entranceGardenCount;

    /**
     * 主卧面积
     */
    @TableField("master_bedroom_area")
    private BigDecimal masterBedroomArea;

    /**
     * 客厅面积
     */
    @TableField("living_room_area")
    private BigDecimal livingRoomArea;

    /**
     * 厨房面积
     */
    @TableField("kitchen_area")
    private BigDecimal kitchenArea;

    /**
     * 卫生间面积
     */
    @TableField("bathroom_area")
    private BigDecimal bathroomArea;

    /**
     * 整体朝向（南北通透、朝南、东西向等）
     */
    @TableField("orientation")
    private String orientation;

    /**
     * 主卧朝向
     */
    @TableField("master_bedroom_orientation")
    private String masterBedroomOrientation;

    /**
     * 客厅朝向
     */
    @TableField("living_room_orientation")
    private String livingRoomOrientation;

    /**
     * 楼层位置（底层、顶层、中间层）
     */
    @TableField("floor_position")
    private String floorPosition;

    /**
     * 是否有花园（底层）
     */
    @TableField("has_garden")
    private Boolean hasGarden;

    /**
     * 是否有露台（顶层）
     */
    @TableField("has_terrace")
    private Boolean hasTerrace;

    /**
     * 是否有阁楼（顶层）
     */
    @TableField("has_attic")
    private Boolean hasAttic;

    /**
     * 是否方正
     */
    @TableField("is_square")
    private Boolean isSquare;

    /**
     * 是否有异形空间
     */
    @TableField("has_irregular_space")
    private Boolean hasIrregularSpace;

    /**
     * 是否南北通透
     */
    @TableField("is_transparent")
    private Boolean isTransparent;

    /**
     * 是否全明户型
     */
    @TableField("is_all_bright")
    private Boolean isAllBright;

    /**
     * 是否动静分区
     */
    @TableField("has_dynamic_static_separation")
    private Boolean hasDynamicStaticSeparation;

    /**
     * 是否干湿分区
     */
    @TableField("has_wet_dry_separation")
    private Boolean hasWetDrySeparation;

    /**
     * 阳台数量
     */
    @TableField("balcony_count")
    private Integer balconyCount;

    /**
     * 阳台类型（生活阳台、景观阳台）
     */
    @TableField("balcony_type")
    private String balconyType;

    /**
     * 阳台样式（封闭式、开放式）
     */
    @TableField("balcony_style")
    private String balconyStyle;

    /**
     * 飘窗数量
     */
    @TableField("bay_window_count")
    private Integer bayWindowCount;

    /**
     * 飘窗类型（全飘、半飘）
     */
    @TableField("bay_window_type")
    private String bayWindowType;

    /**
     * 厨房是否带生活阳台
     */
    @TableField("kitchen_has_balcony")
    private Boolean kitchenHasBalcony;

    /**
     * 卫生间是否带浴缸
     */
    @TableField("bathroom_has_bathtub")
    private Boolean bathroomHasBathtub;

    /**
     * 卫生间是否干湿分离
     */
    @TableField("bathroom_has_separation")
    private Boolean bathroomHasSeparation;

    /**
     * 卫生间是否有窗户
     */
    @TableField("bathroom_has_window")
    private Boolean bathroomHasWindow;

    /**
     * 层高（米）
     */
    @TableField("floor_height")
    private BigDecimal floorHeight;

    /**
     * 净高（米）
     */
    @TableField("net_height")
    private BigDecimal netHeight;

    /**
     * 是否有loft挑高
     */
    @TableField("has_loft")
    private Boolean hasLoft;

    /**
     * 是否有复式
     */
    @TableField("has_duplex")
    private Boolean hasDuplex;

    /**
     * 是否可改户型
     */
    @TableField("can_modify")
    private Boolean canModify;

    /**
     * 是否有赠送面积
     */
    @TableField("has_gift_area")
    private Boolean hasGiftArea;

    /**
     * 赠送面积描述
     */
    @TableField("gift_area_desc")
    private String giftAreaDesc;

    /**
     * 户型图类型（原始结构图、装修示意图、尺寸标注图）
     */
    @TableField("floor_plan_type")
    private String floorPlanType;

    /**
     * 户型图状态（开发商标准图、业主实测图）
     */
    @TableField("floor_plan_status")
    private String floorPlanStatus;

    /**
     * 户型图URL
     */
    @TableField("floor_plan_url")
    private String floorPlanUrl;

    /**
     * 户型优势标签（JSON格式）
     */
    @TableField("advantage_tags")
    private String advantageTags;

    /**
     * 适用人群标签
     */
    @TableField("suitable_crowd")
    private String suitableCrowd;

    /**
     * 备注说明
     */
    @TableField("remark")
    private String remark;

    /**
     * 状态：0-禁用，1-启用
     */
    @TableField("status")
    private Integer status;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 创建人ID
     */
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    private Long createBy;

    /**
     * 更新人ID
     */
    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
    private Long updateBy;

    /**
     * 是否删除：0-未删除，1-已删除
     */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;
}
